package com.xiaoshuidi.cloud.module.contract.service.contract;

import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.contractTemplate.*;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractTemplateDO;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.TemplateDynamicTablesDO;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.TemplateKeywardsDO;

import java.util.List;

/**
 * 合同模板 Service 接口
 *
 * @author 合房租赁
 */
public interface ContractTemplateService {

    /**
     * 创建合同模板
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createContractTemplate( ContractTemplateCreateReqVO createReqVO);

    /**
     * 开启&关闭合同模板
     *
     * @param reqVO 更新信息
     */
    void openOrCloseContractTemplate( ContractTemplateOpenOrCloseReqVO reqVO);

    /**
     * 更新合同模板
     *
     * @param updateReqVO 更新信息
     */
    void updateContractTemplate( ContractTemplateUpdateReqVO updateReqVO);

    /**
     * 作废合同模板
     *
     * @param id 编号
     */
    void deleteContractTemplate(Long id);

    /**
     * 获得合同模板
     *
     * @param id 编号
     * @return 合同模板
     */
    ContractTemplateRespVO getContractTemplate(Long id);

    /**
     * 获得合同模板分页
     *
     * @param pageReqVO 分页查询
     * @return 合同模板分页
     */
    PageResult<ContractTemplateRespVO> getContractTemplatePage(ContractTemplatePageReqVO pageReqVO);


    /**
     * 模板关联房源
     *
     * @param reqVO 更新信息
     */
    void relationHouse( ContractTemplateRelHouseReqVO reqVO);

    /**
     * 校验模板名称
     *
     * @param templateName
     * @param id
     * @param templateType
     * @return: boolean
     */
    boolean existName(String templateName, Long id, String templateType);

    /**
     * 根据房间号获取合同模板
     * @param roomType
     * @param apartmentId
     * @param templateType
     * @return: com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractTemplateDO
     */
    ContractTemplateDO getTemplateByRoomId(Long apartmentId, Integer roomType,String templateType);

    /**
     * 根据模板ID获取合同关键字列表
     * @param templateId
     * @param templateType
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.TemplateKeywardsDO>
     */
    List<TemplateKeywardsDO> getTemplateKeyWordsByTemplateId(Long templateId,String templateType);

    /**
     * 根据模板ID获取合同模板动态表格
     * @param templateId
     * @param templateType
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.TemplateDynamicTablesDO>
     */
    List<TemplateDynamicTablesDO> getTemplateDynamicTablesByTemplateId(Long templateId, String templateType);


    /**
     *  查询已关联过合同模板的门店IDs
     * @param templateId
     * @param templateType
     * @return: java.util.List<java.lang.Long>
     */
    List<Long> getSelectedApartments(Long templateId, String templateType);

    /**
     * 获得合同模板关键字分页
     *
     * @param pageReqVO 分页查询
     * @return 合同模板关键字分页
     */
    PageResult<TemplateKeywardsDO> getContractTemplateKeywordsPage(ContractTemplateKeywordsPageReqVO pageReqVO);
}
